"""
内容：用户密码复杂度验证
作者：易和
单位：三创
时间：2021.06.27
"""

def iflength(str):
    """
    传入密码及当前分数，并对长度进行判断
    """
    if len(str) > 8:
        global grade
        grade += 1
        #     返回1，表示长度符合标准，加1分
        return 1
    else:
        #     返回0，表示长度不达标，不加分，并且需要输出
        return 0


def iftype(str):
    """
    传入密码，并对密码包含类型进行判断，函数返回1表示类型符合，返回0表示不符合
    """
    # 定义一个总的包含类型数量，以及四个变量对类型有无进行判断
    sub = 0
    swindex = 0
    bwindex = 0
    numindex = 0
    otherindex = 0
    for i in range(0, len(str)):
        if ord(str[i]) >= 65 and ord(str[i]) <= 90:
            bwindex = 1
        elif ord(str[i]) >= 97 and ord(str[i]) <= 122:
            swindex = 1
        elif ord(str[i]) >= 48 and ord(str[i]) <= 57:
            numindex = 1
        else:
            otherindex = 1
    sub = swindex + bwindex + numindex + otherindex
    # 如果大于三种则分数+1
    if sub >= 3:
        global grade
        grade += 1
        return 1
    # 如果不满足，则返回0
    else:
        return 0


def ifsame(str):
    '''
    传入密码，对密码是否有超过3的重复子串进行判断
    '''
    a = []
    for i in range(len(str)):
        for j in range(i + 3, len(str) + 1):
            a.append(str[i:j])
    for m in range(len(a)):
        for n in range(m + 1, len(a)):
            if a[m] == a[n]:
                return 0
    global grade
    grade += 1
    return 1

# 主程序，控制台输入密码str，进行长度，类型，重复子串判断之后输出安全等级及具体问题
print("请输入您要设置的密码，按enter键提交：")
str = input()
grade = 2
print(iflength(str))
print(iftype(str))
print(ifsame(str))
output = "您的安全等级是 {} 级,"
print(output.format(grade),end='')
a = []
if (iflength(str)) == 0:
    a.append('长度小于8')
if (iftype(str)) == 0:
    a.append('密码没有由三种以上字符组成')
if (ifsame(str)) == 0:
    a.append('有长度超过或等于3的子串重复')
if (iflength(str)) == (iftype(str)) == (ifsame(str)) ==1:
    print("您的密码符合要求，很安全")
else:
    print('您的安全问题有：',end='')
    print(a)






# print(ord("A")),输出65；print(ord("Z")),输出90
# print(ord("a"))，输出97；print(ord("z"))，输出122
# print(ord("0"))，输出48；print(ord("9"))，输出57
